package Array.BinarySearch;//给定一个 正整数 num ，编写一个函数，如果 num 是一个完全平方数，则返回 true ，否则返回 false 。
//
// 进阶：不要 使用任何内置的库函数，如 sqrt 。 
//
// 
//
// 示例 1： 
//
// 
//输入：num = 16
//输出：true
// 
//
// 示例 2： 
//
// 
//输入：num = 14
//输出：false
// 
//
// 
//
// 提示： 
//
// 
// 1 <= num <= 2^31 - 1 
// 
// Related Topics 数学 二分查找 👍 311 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class isPerfectSquare {
    public boolean isPerfectSquare(int num) {
        /**
         * 利用二分查找，即找到一个整数平方和恰好等于目标值
         * */
        int left = 0, right = num;
        while (left<=right){
            int mid = (right-left)/2 + left;
            if((long)mid*mid > num){

                right = mid - 1;
            }else if((long)mid*mid < num){
                left = mid + 1;
            }else{
                //在这里找到说明目标值是完全平方数
                return true;
            }
        }

        //否则 不是完全平方数
        return false;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
